package Q8_08_Permutations_With_Dups;
import java.util.ArrayList;
import java.util.HashMap;
public class Question {
public static HashMap<Character, Integer> buildFreqTable(String s) {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (char c : s.toCharArray()) {
if (!map.containsKey(c)) {
map.put(c, 0);
}
map.put(c, map.get(c) + 1);
}
return map;
}
public static void printPerms(HashMap<Character, Integer> map, String prefix, int remaining, ArrayList<String> result) {
if (remaining == 0) {
result.add(prefix);
return;
}
for (Character c : map.keySet()) {
int count = map.get(c);
if (count > 0) {
map.put(c, count - 1);
printPerms(map, prefix + c, remaining - 1, result);
map.put(c, count);
}
}
}
public static ArrayList<String> printPerms(String s) {
ArrayList<String> result = new ArrayList<String>();
HashMap<Character, Integer> map = buildFreqTable(s);
printPerms(map, "", s.length(), result);
return result;
}
public static void main(String[] args) {
String s = "aabbccc";
ArrayList<String> result = printPerms(s);
System.out.println("Count: " + result.size());
for (String r : result) {
System.out.println(r);
}
}
}